package com.dkm.orproject.dkmoa.dao;

import com.dkm.orproject.dkmoa.domain.OaJurisdiction;
import com.dkm.orproject.dkmoa.domain.OaPersonnel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface OaPersonnelMapper {
    /**
     * 删除
     * @param pkPersonnelId 人员ID
     * @return 删除的行数
     */
    int deleteByPrimaryKey(Long pkPersonnelId);


    /**
     * 人员增加
     * @param record 人员信息
     * @return 是否增加成功
     */
    int insertSelective(OaPersonnel record);

    /**
     * 根据id查找特定人员的信息(单表查询)
     * @param pkPersonnelId 人员的Id
     * @return 某一个人员的信息
     */
    OaPersonnel selectByPrimaryKey(Long pkPersonnelId);

    /**
     * 更新特定的用户的信息
     * @param record 用户的信息
     * @return 是否更新成功
     */
    int updateByPrimaryKeySelective(OaPersonnel record);
    /**
     * 登录
     * @param oaPersonnel 用户信息
     * @return 是否返回用户信息
     */
    OaPersonnel isLogin(OaPersonnel oaPersonnel);

    /**
     * 逻辑删除
     * @param pkPersonnelId 用户信息的Id
     * @param date 删除时间
     * @param  personnelName 人员名字
     * @return 是否更新成功
     */
    int updateById(@Param("pkPersonnelId") Long pkPersonnelId, @Param("date") Date date, @Param("personnelName") String personnelName);

    /**
     * 批量物理删除
     * @param list 人员id的集合
     * @return 删除的行数
     */
    int deleteAll(List<Long> list);
    /**
     * 批量逻辑删除
     * @param list 人员id的集合
     * @param personnelName 更新人
     * @param  date 更新时间
     * @return 删除的行数
     */
    int updateAll(@Param("list") List<Long> list,@Param("personnelName") String personnelName,@Param("date") Date date);
    /**
     * 查询所有人员的信息
     * @param oaPersonnel 人员模型 用于条件查询
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 人员集合
     */
    List<OaPersonnel> findAll(@Param(value = "personnel") OaPersonnel oaPersonnel, @Param(value = "startTime") String startTime, @Param(value = "endTime") String endTime);

    /**
     * 总行数
     * @param oaPersonnel 人员模型 用于条件查询
     * @param startTime 开始时间
     * @param endTime 结束
     * @return 总行数
     */
    Long rowCount(@Param(value = "personnel") OaPersonnel oaPersonnel,@Param(value = "startTime") String startTime,@Param(value = "endTime") String endTime);

    /**
     * 下拉框
     * @return 用户
     */
    List<OaPersonnel> findByAll();

    /***
     * 查询关键字是否多余
     * @param personnel 人员
     * @return 1或者0
     */
    int findByAccount(OaPersonnel personnel);

    /**
     * 人员信息查看功能(多表查询)
     * @param pkPersonnelId 人员Id
     * @return 人员信息
     */
    OaPersonnel selectByPersonId(Long pkPersonnelId);

    /**
     * 根据部门id (除操作人员的的人)查询人员
     * @param organizationId 部门Id
     * @param pkPersonnelId 人员Id
     * @return 人员信息的集合
     */
    List<OaPersonnel> selectByDertment(@Param("organizationId") Long organizationId,@Param("pkPersonnelId") Long pkPersonnelId);

    /**
     * 查询 流程审核的人员ID
     * @param code 权限代码
     * @return 人员ID
     */
    List<Long> selectByHover(String code);

    /**
     * 根据id查询角色权限
     * @param pkPersonnelId 人员ID
     * @return 权限模型
     */
    List<OaJurisdiction> selectByJurisdiction(@Param("pkPersonnelId") Long pkPersonnelId);

    /**
     * 人员设置为禁用
     * @return  数量
     */
    int dimissionPersonnel();
    /**
     * 关键字查询
     * @param  wordKey 关键字
     * @return  集合
     * */
    List<OaPersonnel> findByEntryCheckPersonnel(@Param("wordKey") String wordKey);

    /**
     * 将人员的信息导出
     * @return 人员信息
     */
    List<OaPersonnel>export();

    /**
     * 查询所有的人员
     * @return 人员集合
     */
    List<OaPersonnel> selectAll();
}